home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / tcomm40 / litecomm.h < prev    next >
Text File  |  1988-08-27  |  7KB  |  233 lines

  1. /*
  2. **    litecomm.h
  3. **        Communications support for Datalight (tm) C
  4. **        Copyright (c) 1987, 1988 - Information Technology, Ltd.,
  5. **                             All Rights Reserved
  6. **  Revisions -
  7. **        01        01/08/88    Modify for DLC 3.21
  8. **                            remove lc_sbrk define
  9. **        2.70    02/25/88    abandon DLC support
  10. */
  11.  
  12. #ifndef TRUE
  13. #define TRUE 1
  14. #endif
  15. #ifndef FALSE
  16. #define FALSE 0
  17. #endif
  18. #define ERR (-1)
  19.  
  20. #ifndef LITECOMM_H                /* if not already included        */
  21.  
  22. #define COM1BASE    0x3f8        /* base for com port 1 */
  23. #define COM2BASE    0x2f8        /* base for com port 2 */
  24. #define IRQ1        0x10        /* int req mask for port 1 - irq4 */
  25. #define IRQ2        0x08        /* int req mask for port 2 - irq3 */
  26. #define COM1VEC        0x0c        /* vector for port 1 */
  27. #define COM2VEC        0x0b        /* vector for port 2 */
  28.  
  29. #ifdef KRNL
  30. unsigned COM3BASE = 0x3e8;        /* user changeable com port 3 */
  31. unsigned COM4BASE = 0x2e8;        /* user changeable com port 4 */
  32. char IRQ3 = IRQ1;                /* ditto for int levels */
  33. char IRQ4 = IRQ2;
  34. unsigned COM3VEC = 0x0c;
  35. unsigned COM4VEC = 0x0b;
  36. #else
  37. extern unsigned COM3BASE;
  38. extern unsigned COM4BASE;
  39. extern char IRQ3;
  40. extern char IRQ4;
  41. extern unsigned COM3VEC;
  42. extern unsigned COM4VEC;
  43. #endif
  44.  
  45. /*
  46. **    special control characters
  47. */
  48. #define    XON        0x11
  49. #define    XOFF    0x13
  50.  
  51. /*
  52. **    8250 register defines (offsets from base)
  53. */
  54. #define    THREG    0                /* transmit hold register */
  55. #define RDREG    0                /* input data register */
  56. #define LSBDIV    0                /* least sig. byte of baud rate divisor */
  57. #define MSBDIV    1                /* most sig, only when line ctl bit 7 = 1 */
  58. #define IEREG    1                /* interrupt enable register */
  59. #define IIDREG    2                /* interrupt ID register */
  60. #define LCREG    3                /* line control register */
  61. #define MCREG    4                /* modem control register */
  62. #define LSREG    5                /* line status register */
  63. #define MSREG    6                /* modem status register */
  64.  
  65. /*
  66. **    PARITY SETTINGS used in conjunction with above
  67. */
  68. #define    NPARITY    0x00            /* no parity */
  69. #define OPARITY    0x08            /* odd parity */
  70. #define EPARITY    0x18            /* even parity */
  71. #define    MPARITY    0x28            /* mark parity */
  72. #define SPARITY    0x38            /* space parity */
  73.  
  74. /*
  75. **    DATA and STOP BIT settings
  76. */
  77. #define BIT5    0x00            /* 5 data bits */
  78. #define BIT6    0x01            /* 6 data bits */
  79. #define BIT7    0x02            /* 7 data bits */
  80. #define BIT8    0x03            /* 8 data bits */
  81. #define STOP1    0x00            /* 1 stop bit */
  82. #define STOP2    0x04            /* 2 stop bit */
  83.  
  84. /*
  85. **    Baud Rate Settings
  86. */
  87. #define B110    110
  88. #define    B300    300
  89. #define    B600    600
  90. #define B1200    1200
  91. #define    B2400    2400
  92. #define    B4800    4800
  93. #define    B9600    9600
  94. #define    B19200    19200
  95.  
  96. /*
  97. ** SPECIAL PURPOSE SETTINGS - internal use only
  98. */
  99. #define    BREAK_ON 0x40            /* enable transmitter break */
  100. #define    SETBAUD    0x80            /* enable access to baud rate divisor */
  101.  
  102. #define    DTR        0x01            /* turn on DTR modem signal */
  103. #define RTS        0x02            /* turn on RTS modem signal */
  104. #define    OUT2    0x08            /* enable OUT2 for interrupts */
  105. #define    LOOPBACK 0x10            /* enable loopback mode */
  106.  
  107. #define    RDINT    0x01            /* enable receive data int */
  108. #define    THREINT    0x02            /* enable transmit hold reg empty int */
  109. #define    BRKINT    0x04            /* enable break/error int */
  110. #define    MSTINT    0x08            /* enable modem change int */
  111.  
  112. #define NOPEND    0x01            /* no interrupts pending */
  113. #define INTMST    0x00            /* modem change int */
  114. #define    INTTHRE    0x02            /* THRE int */
  115. #define    INTRD    0x04            /* receive data int */
  116. #define    INTBRK    0x06            /* break/error int */
  117.  
  118. /*
  119. **    line status register values
  120. */
  121. #define    RDRDY    0x01            /* receive data ready */
  122. #define ORUNERR    0x02            /* over-run error */
  123. #define    PARERR    0x04            /* parity error */
  124. #define FRMERR    0x08            /* framing error */
  125. #define    BRKDET    0x10            /* break detect */
  126. #define THREMP    0x20            /* transmit hold reg empty */
  127. #define TSREMP    0x40            /* transmit shift reg empty */
  128. #define TIMEOUT    0x80            /* timeout */
  129.  
  130. /*
  131. **    modem status register values
  132. **        Bits 0 - 3 define which signal(s) have changed
  133. **                   with a value of 1 indicating a change has occurred
  134. **        Bits 4 - 7 indicate the current state of each of the 4 signals
  135. */
  136. #define    CTSCHG    0x01            /* delta CTS */
  137. #define DSRCHG    0x02            /* delta DSR */
  138. #define    RICHG    0x04            /* delta RI */
  139. #define    DCDCHG    0x08            /* delta DCD */
  140. #define    CTS        0x10            /* Clear To Send */
  141. #define DSR        0x20            /* Data Set Ready */
  142. #define RI        0x40            /* Ring Indicator */
  143. #define DCD        0x80            /* Data Carrier Detect */
  144.  
  145. /*
  146. ** defines to resolve differences between MSC and TURBOC
  147. ** semantics
  148. */
  149. #ifdef M_I86
  150. #define IVPTR(x) void (interrupt far *x)()
  151. #define getvect(x) _dos_getvect(x)
  152. #define setvect(x,y) _dos_setvect(x,y)
  153. #define enable _enable
  154. #define disable _disable
  155. #define inportb(x) inp(x)
  156. #define outportb(x,y) outp(x,y)
  157. #define MK_FP(seg,ofs)    ((void far *) \
  158.                (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
  159. #endif
  160.  
  161. #ifdef __TURBOC__
  162. #define IVPTR(x) void interrupt (*x)()
  163. #endif
  164.  
  165. #ifdef M_I86
  166. #pragma pack(1)
  167. #endif
  168. typedef    struct
  169. {
  170.     IVPTR(orgvect);             /* original vector */
  171.     unsigned    orgirq;            /* original irq settings */
  172.     unsigned    baseport;        /* baseline port */
  173.     unsigned    pvector;        /* int vector for port */
  174.     unsigned    pirq;            /* port int req mask */
  175.     volatile unsigned mdmstat;    /* current modem status */
  176.     unsigned    mdmctlr;        /* current modem control values */
  177.     volatile unsigned lasterr;    /* last error return */
  178.     volatile unsigned brkrecd;  /* break was detected */
  179.     unsigned    intmask;        /* current active ints */
  180.     char        *inbuff;        /* input ring buffer */
  181.     char        *inbuffend;        /* internal calcs */
  182.     int         inbuflen;        /* size of buffer */
  183.     volatile int inbufcnt;        /* chars in buffer now */
  184.     int            inbufmrk;        /* trigger point for xoff */
  185.     volatile char *inhead;        /* pointer to insert */
  186.     volatile char *intail;        /* pointer to remove */
  187.     int            xstate;            /* TRUE if XON/XOFF active */
  188.     volatile int inxrecd;        /* TRUE if XOFF rec'd */
  189.     volatile int outxsent;        /* TRUE if XOFF sent */
  190.     char        *outbuff;        /* output ring buffer */
  191.     char        *outbuffend;    /* internal calcs */
  192.     int            outbuflen;        /* size of buffer */
  193.     volatile int outbufcnt;        /* chars in buffer now */
  194.     volatile char *outhead;        /* pointer to insert */
  195.     volatile char *outtail;        /* pointer to remove */
  196.     int        rch;        /* port's input char buffer */
  197.     char    far *    oldstk;        /* save area for old stack */
  198.     char    far *    newstk;        /* pointer to handler int stack */
  199.     char    far *    stkbase;    /* pointer to base of int stack */
  200. } COMM;
  201.  
  202. #ifdef M_I86
  203. #pragma pack()
  204. #endif
  205.  
  206. #undef USEHUGE
  207.  
  208. #ifdef M_I86
  209. #ifdef M_I86CM
  210. #define USEHUGE
  211. #endif
  212.  
  213. #ifdef M_I86LM
  214. #define USEHUGE
  215. #endif
  216. #endif
  217.  
  218. #ifdef __TURBOC__
  219. #ifdef __COMPACT__
  220. #define USEHUGE
  221. #endif
  222.  
  223. #ifdef __LARGE__
  224. #define USEHUGE
  225. #endif
  226. #endif
  227.  
  228. #include "litecomm.fns"
  229.  
  230. #define LITECOMM_H    1
  231.  
  232. #endif
  233.